/*
文件名称：顺序栈
摘要：实现顺序栈相关功能
本文件功能包含：
1：顺序栈定义
2：顺序栈相关实现函数
int InitStack(SeqStack *S)			//构造一个空栈
int ClearStack(SeqStack *S)			//清除栈
int IsEmpty(SeqStack S)				//判断栈是否为空
int IsFull(SeqStack S)				//判断栈是否为满
int Push(SeqStack *S,ElemType x)	//进栈操作
int Pop(SeqStack *S,ElemType *x)	//出栈操作
int GetTop(SeqStack *S,ElemType *x)	//读栈操作
作者：张恒
完成日期：2013年10月5日
*/

#define Stack_Size 50				//设置栈中元素个数为50个
#define ElemType int				

typedef struct
{
	ElemType elem[Stack_Size];
	int top;						//top为-1表示空栈
}SeqStack;

int InitStack(SeqStack *S)			//构造一个空栈
{
	(*S).top = -1;
	return 0;
}

int ClearStack(SeqStack *S)			//清除栈
{
	(*S).top = -1;
	return 0;
}

int IsEmpty(SeqStack S)				//判断栈是否为空
{
	if(S.top == -1)
	{
		return 0;
	}
	return -1;
}

int IsFull(SeqStack S)				//判断栈是否为满
{
	if(S.top == Stack_Size-1)
	{
		return 0;
	}
	return -1;
}

int Push(SeqStack *S,ElemType x)	//进栈操作
{
	if((*S).top == Stack_Size-1)
	{
		return -1;
	}
	(*S).top++;
	(*S).elem[(*S).top] = x;
	return 0;
}

int Pop(SeqStack *S,ElemType *x)	//出栈操作
{
	if((*S).top == -1)
	{
		return -1;
	}
	*x = (*S).elem[(*S).top];
	(*S).top--;
	return 0;
}

int GetTop(SeqStack *S,ElemType *x)	//读栈操作
{
	if((*S).top == -1)
	{
		return -1;
	}
	*x = (*S).elem[(*S).top];
	return 0;
}